package com.problem.leetcode;
//给定一个字符串 s 和一个整数 k，从字符串开头算起，每计数至 2k 个字符，就反转这 2k 字符中的前 k 个字符。
//
//
// 如果剩余字符少于 k 个，则将剩余字符全部反转。
// 如果剩余字符小于 2k 但大于或等于 k 个，则反转前 k 个字符，其余字符保持原样。
//
//
//
//
// 示例 1：
//
//
//输入：s = "abcdefg", k = 2
//输出："bacdfeg"
//
//
// 示例 2：
//
//
//输入：s = "abcd", k = 2
//输出："bacd"
//
//
//
//
// 提示：
//
//
// 1 <= s.length <= 10⁴
// s 仅由小写英文组成
// 1 <= k <= 10⁴
//
//
// Related Topics 双指针 字符串 👍 589 👎 0
public class Problem541 {

    public String reverseStr(String s, int k) {

        if (s.length() <= 0 || s.length() < 2 * k) {
            return s;
        }

        int begin = 0, end = s.length() - 1, index = 2 * k - 1, oldIndex = 0;
        char[] chars = s.toCharArray();
        while (index < end) {
            reverseChar(begin, begin+k - 1, chars);
            begin = index+1;
            oldIndex = index;
            index = index + 2 * k;
        }

        if ((end - oldIndex) < k) {
            reverseChar(oldIndex+ 1, end, chars);
        } else if ((end - oldIndex) >= k && (end - oldIndex) < 2 * k) {
            reverseChar(oldIndex+ 1, oldIndex+k, chars);
        }
        return String.valueOf(chars);
    }

    public static void reverseChar(int begin, int end, char[] chars) {
        while (begin < end) {
            char tmp = chars[begin];
            chars[begin] = chars[end];
            chars[end] = tmp;
            ++begin;
            --end;
        }
    }


    public static void main(String[] args) {

        String str = "abc";
        char[] chars = str.toCharArray();
        reverseChar(0, chars.length - 1, chars);
        System.out.println(String.valueOf(chars));

        System.out.println(1);
    }
}
